touch is a standard Unix program used to change a file's access and modification timestamps. It is also used to create a new empty file.
Contents |
A touch utility appeared in Version 7 AT&T UNIX. The version of touch bundled in GNU coreutils was written by Paul Rubin, Arnold Robbins, Jim Kingdon, David MacKenzie
The Single Unix Specification (SUS) specifies that touch should change the access times, modification times, or both, for a file. The file is identified by a pathname supplied as a single argument. It also specifies that if the file identified does not exist, the file is created and the access and modification times are set as specified. If no new timestamps are specified, touch uses the current time.
The SUS mandates the following options:
The time is specified in the format [[cc]yy]MMDDhhmm[.ss] where MM specifies the two-digit numeric month, DD specifies the two-digit numeric day, hh specifies the two-digit numeric hour, mm specifies the two-digit numeric minutes. Optionally ss specifies the two-digit seconds, cc specifies the first two digits of the year, and yy specifies the last two digits of the year.
Note that if invoked without these options, the standard specifies that the current date and time are used to change the access and modification times. This behaviour simulates an update to a file without having to change it, which may be desirable in certain situations (see the example below).
Other Unix and Unix-like operating systems may add extra options. For example, GNU touch adds a -d option, which enables time input in formats other than that specified.
The simplest use case for touch is thus:
# touch myfile.txt
Touch doesn't modify the contents of myfile.txt; it just updates the timestamp of the file to the computer's current date and time, whatever that happens to be. Or, if myfile.txt does not exist it is created, with zero length.
Here's an example that shows why we might want to do this. We wish to re-make a software project we are writing. We have changed the makefile and need to run make again. However, if we run make immediately we find that
# make make: nothing to be done for `all'
Since the source code file is already updated, we will need to use touch to simulate a file update, so make will run and recompile the software.
# touch project.c # make
Then make will rebuild the project.
Here's how to change the date and time of a file.
# touch -t 200701310846.26 index.html # touch -d '2007-01-31 8:46:26' index.html # touch -d 'Jan 31 2007 8:46:26' index.html # (* In the case of Win32(XP) command prompt, use <""> instead of <''>. Or "touch: Invalid date format" error will appear.)
The above three are equivalent: they will change the date and time of index.html to January 31, 2007 at 8:46:26am.
Although commands like cp, grep, chmod etc have a recursive switch (-r or -R or both) to apply the command recursively to the subdirectories, touch doesn't have this functionality yet (as of August, 2008). It can be accomplished by the following:
# find . -exec touch {} +
Programs that perform similar operations as the Unix touch
utility are available for other operating systems, including Microsoft Windows and Mac OS.
File Date Touch - freeware for Windows
|